class: title-slide # ER014 - Data Science & Strategy for Business ## PVA3 ### Teil 1: Einführung Logistische Regressionsanalyse <br> <br> <br> <br> <br> <br> <br> ### FS 2025 <br> ### Prof. Dr. Jörg Schoder .mycontacts[
@FFHS-EconomicResearch
@jfschoder ] --- layout: true <div class="my-footer"></div> <div style="position: absolute;left:400px;bottom:10px;font-size:9px">
Prof. Dr. Jörg Schoder</div> --- name: agenda class: left .blockquote[Agenda] ## Einführung in die Logistische Regressionsanalyse * Vom linearen zum generalisierten Modell: Warum brauchen wir glm()? * Praxisrelevanz der logistischen Regression * Umsetzung in R --- class: inverse, center, middle ## Vom linearen zum generalisierten Modell: Warum brauchen wir glm()? .blockquote[Refresher lineares Modell (`lm()`)] .blockquote[Generalisiertes lineares Modell (`glm()`)] --- class: left .blockquote[Refresher lineares Modell (`lm()`)] ## Einfaches lineares Modell `$$Y = \beta_1 + \beta_2 X + \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, \sigma^2)$$` - Beziehung zwischen \( X \) und \( Y \) schätzen - abhängige Variable (AV bzw. `\(Y\)`): metrisch, normalverteilt - abhängige Variable (UV bzw. `\(X\)`): metrisch oder kategorial - Umsetzung in
: `lm(Y ~ X, data = my_data)` - t-Test und ANOVA als Spezialfälle | Verfahren | Modellform | UV-Typ | AV-Typ | |----------|----------------------------------------|----------------|------------| | t-Test | `\(Y = \beta_0 + \beta_1 \cdot \mbox{Gruppe}\)` | binär | metrisch | | ANOVA | `\(Y = \beta_0 + \beta_1 D_1 + \beta_2 D_2\)` | kategorial (k>2) | metrisch | ➡️ Regression bzw. LM als mächtiger "framework" --- class: left .blockquote[Refresher lineares Modell (`lm()`)] ## Multiple lineare Regression .panelset[ .panel[.panel-name[Theorie] **Modell:** `$$y = \beta_{0i} + \beta_{1i} x_{1i} + \beta_{2i} x_{2i} + \cdots + \beta_{ki} x_{k2i} + \varepsilon_i$$` bzw. in Matrixnotation `$$Y = \beta X+\varepsilon$$` ➡️ Entscheidender Mehrwert zur Einfachregression: Möglichkeit zur Kontrolle von mehreren Einflussfaktoren (Beispiel Gebrauchtwagen (PVA2): Preis, Alter, Kilometer) ] .panel[.panel-name[Beispiel] ➡️ Umsetzung in
mit der `lm()`-Funktion ``` r library(tidyverse) # Import data ----- my_in_file <- "autos_(StockerUIBK)_20240414.csv" tbl_autos <- read_csv2(xfun::from_root("data","raw",my_in_file)) # Fit regression model ------ reg_auto <- tbl_autos %>% lm(Preis ~ Alter + km,.) ``` ] .panel[.panel-name[Regressionstabelle] ``` r # Results ----- library(moderndive) # für get_regression_()`-Funktion - tidy-Format library(gt) # für Tabellendarstellung mit `gt()`-Funktion reg_auto %>% get_regression_table() %>% gt() ```
term
estimate
std_error
statistic
p_value
lower_ci
upper_ci
intercept
22649.884
411.870
54.993
0
21815.356
23484.412
Alter
-1896.264
235.215
-8.062
0
-2372.854
-1419.674
km
-0.031
0.008
-3.943
0
-0.047
-0.015
] ] --- class: left .blockquote[Refresher lineares Modell (`lm()`)] ## Annahmen im linearen Regressionsmodell .panelset[ .panel[.panel-name[A-Annahmen...] ### ...zur funktionalen Spezifikation A1 **Variablenauswahl**: Die Gleichung `$$Y = \beta X+\varepsilon$$` enthält alle relevanten (und keine irrelevanten) Regressoren x_i. A2 📈 **Linearität**: Der (wahre) Zusammenhang zwischen Regressor(en) X und Regressand Y ist linear. A3 📌 **Parameterkonstanz**. Die Paramter `\(\beta\)` sind für alle N Beobachtungen `\((x_i,y_i)\)` konstant. ] .panel[.panel-name[B-Annahmen...] ### ...zur Störgrössen-Spezifikation B1 🎯 **Erwartungswert**: `\(\mathbb{E}(\varepsilon_i)=0,~\forall i\)` B2 📊 **Homoskedastizität**: Varianz der Fehler ist konstant über alle Werte von X. `$$\mbox{Var}(\varepsilon_i) = \sigma^2,~\forall i$$` B3 👥 **Unabhängigkeit der Fehler** (keine Autokorrelation): Beobachtungen und Fehler sind unabhängig. `$$\mbox{Cov}(\varepsilon_i,\varepsilon_j)=0,~\forall i\neq j$$` B4 🔔 **Normalverteilung der Fehler**: Die Residuen (Fehler) sind normalverteilt. `$$\varepsilon \sim \mathcal{N}(0, \sigma^2)$$` ] .panel[.panel-name[C-Annahmen...] ### ...zur Variablen-Spezifikation C1 📌 **Fixiertheit der Regressoren**: Regressoren sind keine Zufallsvariablen (sie können vielmehr wie in einem Experiment kontrolliert werden). C2 🔄 **Keine perfekte Multikollinearität** (`\(X'X\)` invertierbar): Die Regressoren dürfen nicht vollständig linear abhängig sein. ] ] .quelle[Vgl. ausführlich <a name=cite-vonAuer_oekonometrie_2023></a>([von Auer, 2023](https://link.springer.com/book/10.1007/978-3-658-42700-9)).] ??? * Verletzung A1: fehlerhafte Modellspezifikation
verzerrte Schätzer A3: bspw. keine Strukturbrüche B1 Kontext 📐 **Exogenität** (auch: Orthogonalität): Die erklärenden Variablen (X) sind strikt exogen und folglich **nicht** mit dem Fehlerterm korreliert: `$$\text{Cov}(X, \varepsilon) = 0$$` Exogenität/Orthogonalität impliziert einen zentrierten Fehler `\(E(\varepsilon)=0\)`, aber nicht umgekehrt. Verletzung B1: Endogenitätsproblem
verzerrte OLS-Koeffizienten * Verletzung B1: * Folgen: - Instabile Schätzer - Aufgeblähte Standardfehler - Geringere Testpower * **Diagnose:** - Korrelationsmatrix - VIF (Variance Inflation Factor): Faustregel: VIF > 5 oder 10 = Warnsignal B2: sonst: Inferenzproblem durch verzerrte Standardfehler B3: Freiheit von Autokorrelation, sonst: Inferenzproblem durch verzerrte Standarfehler) B4: Normalitätsannahme: wichtig für Konfidenzintervalle & Tests, aber nicht für BLUE * Verletzung von 4 (Unabhängigkeit Fehler): verzerrte Standardfehler - Probleme bei Inferenz (Tests etc.) * Verletzung 5 (Exogenität Regressoren): verzerrte OLS-Koeffizienten. Regressoren dürfen nicht systematisch mit unbeobachteten Faktoren (Fehlerterm) zusammenhängen. --- class: left .blockquote[Refresher lineares Modell (`lm()`)] ## Exkurs: Gauss-Markov-Theorem .blockquote[ Unter den A-, B-, und C-Annahmen (ohne B4, Normalverteilung) ist der OLS-Schätzer der **beste lineare unverzerrte** Schätzer (BLUE: Best Linear Unbiased Estimator). ] ➡️ Die BLUE-Eigenschaft garantiert, dass der OLS-Schätzer im Rahmen der Annahmen nicht nur im Durchschnitt richtig liegt (unverzerrt ist), sondern auch unter allen linearen Verfahren am wenigsten streut – d.h. so präzise wie möglich ist. Dies **ohne** zusätzliche Informationen oder **komplexere Methoden zu benötigen**. ✅ Ist zusätzlich die Normalverteilungsannahme (B4) erfüllt, dann ist der OLS-Schätzer effizient in der Klasse *sämtlicher* (auch nicht-linearer) unverzerrter Schätzer (BUE-Eigenschaft). --- class: left .blockquote[Refresher lineares Modell (`lm()`)] ## Regressionsdiagnostik .panelset[ .panel[.panel-name[Typische Plots] 1. Residuen vs. Fits (Annahmen A2 und B2)
Test auf Linearität & Homoskedastizität 2. Normal Q-Q Plot (Annahme B4)
Test auf Normalverteilung der Fehler 3. Scale-Location Plot (Annahme B2)
Alternativtest auf Homoskedastizität 4. Residuals vs. Leverage (Ausreisser-Diagnostik)
Identifikation von einflussreichen Beobachtungen 5. Cook’s Distance (Ausreisser-Diagnostik)
Visualisierung der Einflussstärke einzelner Fälle ] .panel[.panel-name[Tests] * Homoskedastizität (B2) mit `car::ncvTest()`, `lmtest::bptest()` * Autokorrelation (B3) mit `car::durbinWatsonTest()` * Normalverteilung der Residuen (B4) mit `shapiro.test()` ] .panel[.panel-name[Umsetzung in R] ``` r library(ggfortify) autoplot(reg_auto) + autoplot(reg_auto, which = 4) ``` <img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-3-1.png" width="40%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Multikollinearität] * Korrelation der Regressoren
hoher Wert als Anfangsverdacht; aber keine hinreichende Bedingung! * Varianzinflation (Variance Inflation Factor, VIF) ``` r car::vif(reg_auto) ``` ``` ## Alter km ## 2.745211 2.745211 ``` * Faustregel: * VIF < 5: unproblematisch * VIF > 5: Vorsicht geboten * VIF > 10: Problematisch ] ] ??? * NCV: Non-constant-Variance Test * bptest: Breusch-Pagan-Test --- class: left .blockquote[Refresher lineares Modell (`lm()`)] ## Exkurs: Multikollinearität Bei Verstoss gegen Annahme C2: * Variablenauswahl * Theoriegeleitete Auswahl statt rein datengetriebener Ansatz * Stufenweise Regression mit AIC/BIC-Kriterien * Dimensionsreduktion * Hauptkomponentenanalyse (PCA) vor der Modellierung * Faktoranalyse zur Bildung von latenten Konstrukten * Regularisierung * Ridge Regression (L2) bspw. * LASSO (L1) für Variablenselektion ??? Regularisierung bspw. mit `glmnet()`-Funktion --- class: left .blockquote[Generalisiertes lineares Modell (`glm()`)] ## Wenn `lm()` an Grenzen stösst .panelset[ .panel[.panel-name[Problem] ⚠️ Probleme bei nicht-metrischen abhängigen Variablen `\(Y\)` 🔍 Spezialfall `\(Y\)` **binär**
keine Normalverteilung oder konstante Varianz möglich * Residuen nicht sinnvoll interpretierbar * Homoskedastizität & Normalverteilung **prinzipiell verletzt** 👉 uns interessiert: Wie wahrscheinlich ist das Ereignis `\(Y = 1\)` bei gegebenem `\(X\)`? * Modell muss **Vorhersagen in `\([0,1]\)`** machen, weil... * ...Wahrscheinlichkeiten per Definition zwischen 0 und 1 liegen ] .panel[.panel-name[Visualisierung] <img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-5-1.png" width="40%" style="display: block; margin: auto;" /> ⚠️ Problem: Ein lineares Modell kann **nicht zulässige** Werte < 0 oder > 1 liefern! ] ] --- class: left .blockquote[Generalisiertes lineares Modell (`glm()`)] ## Wenn `lm()` an Grenzen stösst (cont'd) .panelset[ .panel[.panel-name[Lösung] ➡️ Verallgemeinerung des linearen Modells
**GLM** <img src="data:image/png;base64,#../../img/PVA3/GLM_Venn_(Lazic_2015).png" width="50%" style="display: block; margin: auto;" /> * GLM verknüpft *linearen* Prädiktor (`\(\eta=\beta_0 + \beta_1\cdot x_1 + \dots + \beta_k\cdot x_k\)`) und abhängige Variable `\(Y\)` durch eine **Verknüpfungsfunktion (Linkfunktion)**. * Linkfunktionen transformiert *linearen Prädiktor* in eine **Wahrscheinlichkeit** `\(p\)`. * Wir modellieren also `\(P(Y=1|X)\)` als Funktion von `\(X\)`. ] .panel[.panel-name[Visualisierung] <img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-7-1.png" width="35%" style="display: block; margin: auto;" /> ➡️ Logistische Funktion transformiert linearen Prädiktor `\(\eta\)` auf den Wertebereich `\([0,1]\)`
transformiert wird `\(\eta\)`, nicht `\(Y\)` selbst. ] ] ??? Didaktischer Hinweis zu "Warum p?" * Klar formulieren, warum `\(p\)` überhaupt geschätzt werden muss: * Bei binären Variablen (0/1) interessiert uns nicht der Wert von `\(Y\)`, sondern die Wahrscheinlichkeit, mit der das Ereignis `\(Y=1\)` auftritt - gegeben die erklärenden Variablen `\(X\)`. * Wir modellieren also `\(P(Y=1|X)\)` als Funktion von `\(X\)`. * Diese Argumentation hilft besonders, das Modellverständnis von * **Vorhersage eines Wertes (bei lm)** hin zu * **Vorhersage einer Wahrscheinlichkeit (bei glm)** zu verschieben * Obs! Es wird nicht die abhängige Variable selbst transformiert! * **Transformationen**: Hier wird die abhängige Variable selbst transformiert (z.B. logarithmisch oder hochpotenziell), um die Normalverteilung und Linearität der Beziehung zu erfüllen. * **GLMs:** Hier wird die Verknüpfungsfunktion verwendet, um die Beziehung zwischen der linearen Prädiktion und der erwarteten abhängigen Variable zu modellieren --- class: left .blockquote[Generalisiertes lineares Modell (`glm()`)] ## Wahrscheinlichkeiten, Odds und die Logit-Funktion * Ausgangspunkt Wahrscheinlichkeit: `\(p =\frac{1}{1+e^{-\eta}}= \frac{1}{1 + e^{-(\beta_0 + \beta_1 x+ \dots + \beta_k\cdot x_k)}}\)` * Gegenwahrscheinlichkeit: `\(1-p=1-\frac{1}{1+e^{-\eta}} = \frac{e^{-\eta}}{1+e^{-\eta}}\)` * **Odds** `$$\mbox{Odds}\equiv\frac{p}{1-p}=\frac{\frac{1}{1+e^{-\eta}}}{\frac{e^{-\eta}}{1+e^{-\eta}}}=\frac{1}{e^{-\eta}}=e^\eta$$` * Logarithmieren liefert **Log-Odds** (aka Logit-Funktion) `$$log\big(\frac{p}{1-p}\big)=log(e^\eta)=\eta=\beta_0 + \beta_1 x+ \dots + \beta_k\cdot x_k$$` ⚠️ Logit-Funktion als Verknüpfungsfunktion. ➡️ Mit der linearen Gleichung werden die sog. log-Odds geschätzt, nicht die Wahrscheinlichkeit! ??? * Odds: Wahrscheinlichkeit durch Gegenwahrscheinlichkeit. Ähnlich aber nicht zu verwexhseln mit Wettquoten. Genau genommen Kehrwert der Wettquoten, wie sie in UK angegeben werden. * Die lineare Schätzung liefert log-Odds des Zielereignisses, diese können dann durch logistische Transformation (inverse logit) in Wahrscheinlichkeiten überführt werden. `\(\hat{p} = \frac{1}{1 + e^{-\hat{\eta}}}\)` 💬 **Für den Vortrag**: Was wir direkt schätzen, sind nicht Wahrscheinlichkeiten, sondern die Log-Odds. Damit wir Aussagen über Wahrscheinlichkeiten treffen können, müssen wir diese Werte erst nichtlinear transformieren. * Hinweis Odds: `$$\mbox{Odds}(E)=\frac{x}{y}=\frac{x/(x+y)}{y/(x+y)}$$` impliziert: `$$P(E)=x/(x+y),~\mbox{bzw.}~~P(E^c)=y/(x+y)$$` --- class: left .blockquote[Generalisiertes lineares Modell (`glm()`)] ## Exkurs: Verknüpfungsfunktionen im GLM .panelset[ .panel[.panel-name[Linkfunktion] * Linkfunktion abhängig von der Natur der abhängigen Variablen: * Binärdaten: Logit, Probit * Zähldaten (nicht negativ): Log-Funktion (insbesondere bei Poisson-Verteilung) * stetige Daten mit positivem Skew (Gamma): Inverser Link * normalverteilte Daten: Identitätslink * Linkfunktionen für **binäre** abhängige Variablen | Funktion | Formel | Eigenschaften | |----------|-------------------------------------|-----------------------------------| | **Logit** | `\(p = \frac{1}{1 + e^{-\eta}}\)` | basiert auf logistischer Verteilung | | **Probit** | `\(p = \Phi(\eta)\)` | basiert auf Normalverteilung | ] .panel[.panel-name[Logit vs. Probit] <img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-8-1.png" width="55%" style="display: block; margin: auto;" /> ] ] ??? * Beide sind **streng monoton steigend** * Beide transformieren \(\eta \in (-\infty, \infty)\) → \(p \in (0, 1)\) * Logit = logistische Verteilung → schwerere Tails * Probit = Normalverteilung → stärker zentriert * **In der Praxis oft sehr ähnliche Ergebnisse** * Logistische Linkfunktion `\(p =\frac{1}{1+e^{-\eta}}\)` mit einer Wahrscheinlichkeit `\(p\)`: `$$p =\frac{1}{1+e^{-\eta}}= \frac{1}{1 + e^{-(\beta_0 + \beta_1 x+ \dots + \beta_k\cdot x_k)}}$$` - Transformiert Werte aus `\((-\infty, \infty)\)` in den Bereich `\([0, 1]\)` - Ideal für **binäre abhängige Variablen** - **Inverse** zur logit-Linkfunktion im GLM <img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-9-1.png" width="60%" style="display: block; margin: auto;" /> --- class: left .blockquote[Generalisiertes lineares Modell (`glm()`)] ## Annahmen der logistischen Regression 1. Linearität im Logit: * Die Log-Odds müssen linear mit den unabhängigen Variablen zusammenhängen * Test: Box-Tidwell-Transformation oder Plots der Logits gegen die Prädiktoren 2. Unabhängigkeit der Beobachtungen: Keine Autokorrelation (analog lineare Regression) 3. Keine perfekte Multikollinearität * Wie bei linearer Regression, aber VIF-Werte müssen mit Vorsicht interpretiert werden * VIF über 2.5 kann bereits problematisch sein (strenger als bei linearer Regression) 4. Ausreichend große Stichprobe: Als Faustegel mindestens 10 Fälle der selteneren Kategorie pro Prädiktor 5. Keine extremen Ausreißer oder einflussreichen Fälle (Cook's Distance und Leverage-Werte wie bei linearer Regression) --- class: left .blockquote[Generalisiertes lineares Modell (`glm()`)] ## Vergleich Lineare vs. Logistische Regression | **Aspekt** | **Lineare Regression** | **Logistische Regression** | |-------------------------|------------------------------------------------------------------|---------------------------------------------------------------------------| | **Abhängige Variable** | Metrisch, kontinuierlich | Binär (0/1) | | **Funktionsform** | `\(Y = \beta_0 + \beta_1 X + \varepsilon\)` | `\(\eta = \beta_0 + \beta_1 X = \log\left(\frac{p}{1-p}\right)\)` | | **Interpretation** | Direkte Änderung in `\(Y\)` | Änderung in Log-Odds bzw. Wahrscheinlichkeit | | **Schätzmethode** | OLS (Kleinste Quadrate) | Maximum Likelihood | | **Annahmen** | Linearität, Normalverteilung, Homoskedastizität | Keine Normalverteilung nötig | | **Vorhersagen** | Kontinuierliche Werte | Wahrscheinlichkeiten im Bereich [0,1] | ⚠️ Bei binären AV ist lineare Regression konzeptionell ungeeignet! ??? Die logistische Regression modelliert die Log-Odds (also den Logit) der Wahrscheinlichkeit `\(p\)` als lineare Funktion der Prädiktoren `$$\eta = \beta_0 + \beta_1 X = \log\left(\frac{p}{1-p}\right)$$` --- class: inverse,center,middle # Wir brauchen eine Pause. --- background-image: url("data:image/png;base64,#http://bit.ly/cs631-donkey") background-size: 80% --- class: inverse, center, middle ## Logistische Regression: .blockquote[Anwendungsgebiete] .blockquote[Modellierung und Umsetzung in R] .blockquote[Interpretation] --- class: left .blockquote[Anwendungsgebiete] ## Einsatzbereiche der logistischen Regression .panelset[ .panel[.panel-name[Marketing] ### Marketing & Kundenverhalten - **Kaufentscheidungen vorhersagen** - Wahrscheinlichkeit für Conversion (Kauf/kein Kauf) - Einfluss von Preisgestaltung, Werbung, Demografie - **Kundensegmentierung** - Wahrscheinlichkeit für Zugehörigkeit zu einem Segment - Basis für personalisiertes Marketing - **Churn-Prognose** - Wahrscheinlichkeit, dass Kunde abwandert - Gezielte Retention-Maßnahmen ermöglichen ] .panel[.panel-name[Finance] ### Finanzwesen - **Kreditwürdigkeit** - Wahrscheinlichkeit für Kreditausfall (Scorecard-Modelle) - Regulatorische Vorgaben (Basel) erfordern explizite Risikomodellierung - **Betrugserkennung** - Klassifikation von Transaktionen als verdächtig/unbedenklich - Echtzeitentscheidungen bei Kartentransaktionen - **Investitionsentscheidungen** - Vorhersage von binären Marktereignissen (z.B. Kurseinbruch ja/nein) ] .panel[.panel-name[Etc.] * Medizinische Diagnostik - Risikoprognose (Krankheitsausbruch bei bestimmten Risikofaktoren, z.B. Diabetes, Herzerkrankungen) - Diagnoseunterstützung (Bildgebungsverfahren und Klassifikation von Befunden) - Therapieerfolg (Vorhersage der Wahrscheinlichkeit eines positiven Behandlungsverlaufs) * Politik(wissenschaft): Wahlerfolg Partei A vs. Partei B * Informatik: Spamfilter (ja/nein) * Geologie: Bergsturz (ja/nein) * ... ] ] ??? * Wahrscheinlichkeiten helfen bei Ressourcenallokation: * Welche Kunden soll man priorisieren? * Wann ist ein Kundenverlust wahrscheinlich? * Welche Patienten sind Risikofälle? --- class: left .blockquote[Modellierung und Umsetzung in R] ## Beispiel: Diskriminierung in Bewerbungsverfahren <iframe src="https://www.jstor.org/stable/3592802" width="100%" height="450px" data-external="1"></iframe> ??? * To evaluate which factors were important, job postings were identified in Boston and Chicago for the study, and **researchers created many fake resumes** to send off to these jobs **to see which would elicit a callback**. * The researchers enumerated important characteristics, such as years of experience and education details, and they used these characteristics to randomly generate fake resumes. Finally, they **randomly assigned a name to each resume, where the name would imply the applicant’s sex and race**. * The first names that were used and randomly assigned in the experiment were selected so that they would **predominantly be recognized as belonging to Black or White** individuals; **other races were not considered** in the study. * Da man aber nicht mit absoluter Sicherheit sagen kann, ob ein Name "eindeutig" als *schwarz* oder *weiß* wahrgenommen wird, * führten die Forschenden eine Umfrage durch. In dieser Umfrage prüften sie, wie die Namen von tatsächlichen Personen wahrgenommen werden: * Wenn ein Name in der Umfrage nicht klar einer bestimmten Rassenzugehörigkeit zugeordnet wurde, dann wurde er aus dem Experiment ausgeschlossen. --- class: left .blockquote[Modellierung und Umsetzung in R] ## Diskriminierungsbeispiel: Daten ``` r library(openintro) #Das Paket enthält u.a. die resume-Daten resume %>% select(firstname,race,gender,received_callback) ```
.quelle[vgl. <a name=cite-crh_intro_2024></a>([Çetinkaya-Rundel and Hardin, 2024](https://openintro-ims.netlify.app/)), Kap. 9 und 26).] ??? --- class: left .blockquote[Modellierung und Umsetzung in R] ## Diskrimierungsbeispiel: Variablenauswahl | Variable | Description | |---------------------|-------------------------------------------------------------------------------------------------| | received_callback | Specifies whether the employer called the applicant following submission of the application. | | job_city | City where the job was located: Boston or Chicago. | | college_degree | Indicator for whether the resume listed a college degree. | | years_experience | Number of years of experience listed on the resume. | | honors | Indicator for the resume listing some sort of honors, e.g. employee of the month. | | military | Indicator for if the resume listed any military experience. | | race | Race of the applicant, implied by their first name listed on the resume. | --- class: left .blockquote[Modellierung und Umsetzung in R] ## Diskrimierungsbeispiel: Explorative Datenanalyse 📝 **Aufgabe:** Interpretiert die Statistik bzw. den Boxplot.
received_callback
black
white
0
2278
2200
1
157
235
<img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-14-1.png" width="40%" style="display: block; margin: auto;" /> --- class: left .blockquote[Modellierung und Umsetzung in R] ## Logistische Regression: Durchführung und Interpretation ``` r mod_full <- resume %>% select(received_callback, job_city,college_degree,years_experience,honors,military,has_email_address,race,gender) %>% glm(received_callback~., family = binomial,.) library(broom) mod_full %>% glance() %>% gt() ```
null.deviance
df.null
logLik
AIC
BIC
deviance
df.residual
nobs
2726.921
4869
-1329.623
2677.247
2735.664
2659.247
4861
4870
??? Der Akaike Information Criterion (AIC) ist ein Maß zur Modellbewertung und dient dem Vergleich von statistischen Modellen hinsichtlich ihrer Güte und Komplexität. --- class: left .blockquote[Modellierung und Umsetzung in R] ## Modellselektion mit dem AIC * Akaike Information Criterion (AIC) kann analog zum angepassten Bestimmtheitsmass (adj `\(R^2\)`) verwendet werden, um die Modellgüte zu beurteilen. ``` r mod_disc <- resume %>% select(received_callback, job_city,years_experience,honors,military,has_email_address,race,gender) %>% glm(received_callback~., family = binomial,.) mod_disc %>% glance() %>% gt() ```
null.deviance
df.null
logLik
AIC
BIC
deviance
df.residual
nobs
2726.921
4869
-1329.774
2675.548
2727.475
2659.548
4862
4870
⚠️ Ohne `college_degree` sinkt AIC nur minimal --- class: left .blockquote[Modellierung und Umsetzung in R] ## Regressionstabelle mit log-Odds (Koeffizienten) ``` r mod_disc %>% tidy() %>% gt() ```
term
estimate
std.error
statistic
p.value
(Intercept)
-2.71615623
0.15509583
-17.512761
1.145036e-68
job_cityChicago
-0.43642208
0.11406180
-3.826189
1.301421e-04
years_experience
0.02055025
0.01015306
2.024045
4.296553e-02
honors
0.76341425
0.18524676
4.121067
3.771221e-05
military
-0.34425943
0.21570866
-1.595946
1.105008e-01
has_email_address
0.22207892
0.11300988
1.965128
4.939939e-02
racewhite
0.44290806
0.10801777
4.100326
4.125685e-05
genderm
-0.19590738
0.13520043
-1.449014
1.473335e-01
??? Vorhersagen und Residuen mit ``` r mod_disc %>% augment() %>% head() %>% gt() ```
received_callback
job_city
years_experience
honors
military
has_email_address
race
gender
.fitted
.resid
.hat
.sigma
.cooksd
.std.resid
0
Chicago
6
0
0
0
white
f
-2.586369
-0.3810332
0.0007761662
0.7396550
7.316334e-06
-0.3811811
0
Chicago
6
0
1
1
white
f
-2.708549
-0.3591861
0.0026976803
0.7396573
2.259118e-05
-0.3596716
0
Chicago
6
0
0
0
black
f
-3.029277
-0.3073046
0.0006241688
0.7396621
3.777080e-06
-0.3074006
0
Chicago
6
0
0
1
black
f
-2.807198
-0.3424080
0.0007577503
0.7396589
5.727222e-06
-0.3425378
0
Chicago
22
0
0
1
white
f
-2.035486
-0.4955069
0.0032704097
0.7396410
5.374737e-05
-0.4963191
0
Chicago
6
1
0
0
white
m
-2.018862
-0.4993961
0.0058693503
0.7396404
9.858993e-05
-0.5008681
--- class: left .blockquote[Interpretation der Ergebnisse] ## Logistische Regression: Interpretation der Koeffizienten .panelset[ .panel[.panel-name[Herausforderung] <img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-19-1.png" width="35%" style="display: block; margin: auto;" /> ⚠️ **Nicht-Linearität** in der logistischen Regression: Gleiche Änderung in X führt zu unterschiedlichen Änderungen in p! ➡️ Interpretation der Koeffizienten nicht so intuitiv wie bei linearer Regression ] .panel[.panel-name[Koeffizienten] `$$\log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k$$` - **Interpretation von `\(\beta_j\)`**: - Einheit: Änderung im Log-Odds wenn `\(X_j\)` um 1 Einheit steigt - Vorzeichen: Richtung des Effekts (positiv = erhöht Wahrscheinlichkeit) <table> <caption>Interpretation der Koeffizienten</caption> <thead> <tr> <th style="text-align:left;"> Koeffizient </th> <th style="text-align:left;"> Bedeutung </th> <th style="text-align:left;"> Odds_Ratio </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> β = 0 </td> <td style="text-align:left;"> Kein Einfluss auf p </td> <td style="text-align:left;"> OR = 1 </td> </tr> <tr> <td style="text-align:left;"> β > 0 </td> <td style="text-align:left;"> Positiver Einfluss auf p </td> <td style="text-align:left;"> OR > 1 </td> </tr> <tr> <td style="text-align:left;"> β < 0 </td> <td style="text-align:left;"> Negativer Einfluss auf p </td> <td style="text-align:left;"> OR < 1 </td> </tr> </tbody> </table> ⚠️ `\(\beta\)`-Werte direkt schwer zu interpretieren! ] .panel[.panel-name[Odds Ratio] `$$\text{OR} = e^{\beta_j}$$` - **Interpretation**: - Multiplikativer Effekt auf das Chancenverhältnis (Odds) - OR = 1.5 → Die Odds steigen um 50% pro Einheit in `\(X_j\)` - OR = 0.8 → Die Odds sinken um 20% pro Einheit in `\(X_j\)` - **Beispiel:** <table> <caption>Beispiel: Odds Ratios und Interpretation</caption> <thead> <tr> <th style="text-align:left;"> Prädiktor </th> <th style="text-align:right;"> Koeffizient </th> <th style="text-align:left;"> Odds_Ratio </th> <th style="text-align:left;"> Interpretation </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Alter (Jahre) </td> <td style="text-align:right;"> 0.05 </td> <td style="text-align:left;"> 1.05 </td> <td style="text-align:left;"> 5% höhere Odds pro Lebensjahr </td> </tr> <tr> <td style="text-align:left;"> Geschlecht (m=1) </td> <td style="text-align:right;"> 1.20 </td> <td style="text-align:left;"> 3.32 </td> <td style="text-align:left;"> 3.3-fache Odds für Männer </td> </tr> <tr> <td style="text-align:left;"> Einkommen (10K €) </td> <td style="text-align:right;"> 0.30 </td> <td style="text-align:left;"> 1.35 </td> <td style="text-align:left;"> 35% höhere Odds pro 10K € Einkommen </td> </tr> </tbody> </table> ➡️ OR = e^β macht den Effekt intuitiv verständlich! ] ] --- class: left .blockquote[Interpretation der Ergebnisse] ## Diskriminierungsbeispiel: Wahrscheinlichkeit für einen Rückruf .panelset[ .panel[.panel-name[log-Odds] $$ `\begin{align*} \log_e\left(\frac{\hat{p}}{1-\hat{p}}\right) =\ & -2.7162 \\ & - 0.4364 \cdot \text{job_city}_{\text{Chicago}} \\ & + 0.0206 \cdot \text{years_experience} \\ & + 0.7634 \cdot \text{honors} \\ & + 0.3443 \cdot \text{military} \\ & + 0.2221 \cdot \text{email} \\ & + 0.4429 \cdot \text{race}_{\text{White}} \\ & - 0.1959 \cdot \text{sex}_{\text{Male}} \end{align*}` $$ ] .panel[.panel-name[Beispiel] * Beispiel: Kandidat für einen Job in Chicago mit 14 Jahren Berufserfahrung, ohne Auszeichnungen und Militärdienst, mit Email-Adresse und einem Namen, der "weiss klingt": $$ `\begin{align*} \log_e\left(\frac{\hat{p}}{1-\hat{p}}\right) =\ & -2.7162 \\ & - 0.4364 \cdot 1 \\ & + 0.0206 \cdot 14 \\ & + 0.7634 \cdot 0 \\ & + 0.3443 \cdot 0 \\ & + 0.2221 \cdot 1 \\ & + 0.4429 \cdot 1 \\ & - 0.1959 \cdot 1 \\ = &\ -2.3955 \end{align*}` $$ * Somit beträgt die Rückruf-Wahrscheinlichkeit: `$$\hat{p}=\frac{e^{-2.3955}}{1+e^{-2.3955}}=0.0835 \implies \approx 8\%$$` ] ] --- class: left .blockquote[Interpretation der Ergebnisse] ## Marginal Effects - Alternative zur Interpretation .panelset[ .panel[.panel-name[Konzept] ### Marginal Effects: Intuitive Alternative - **Definition**: Änderung in der Wahrscheinlichkeit bei Änderung des Prädiktors um 1 Einheit - **Vorteil**: Direkte Aussage zur Wahrscheinlichkeit (statt Log-Odds) - **Berechnung**: `\(\frac{\partial p}{\partial X_j} = \beta_j \cdot p \cdot (1-p)\)` ] .panel[.panel-name[Visualisierung] <img src="data:image/png;base64,#01_LogisticRegression_files/figure-html/unnamed-chunk-22-1.png" width="40%" style="display: block; margin: auto;" /> ⚠️ Marginale Effekte variieren je nach Ausprägung der Prädiktoren ] .panel[.panel-name[Arten] ### Arten von Marginalen Effekten | Typ | Beschreibung | Verwendung | |-----|--------------|------------| | **MEM** (Marginal Effects at Means) | Effekt an den Mittelwerten aller Variablen | Für "durchschnittliche" Aussagen | | **AME** (Average Marginal Effects) | Durchschnitt der individuellen marginalen Effekte | Für populationsweite Aussagen | | **MER** (Marginal Effects at Representative values) | Effekt bei spezifischen Werten | Für konkrete Szenarien | ] .panel[.panel-name[Beispiel AME] <table> <caption>Average Marginal Effects (AME)</caption> <thead> <tr> <th style="text-align:left;"> Prädiktor </th> <th style="text-align:left;"> AME </th> <th style="text-align:left;"> Interpretation </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Alter (Jahre) </td> <td style="text-align:left;"> 0.010 </td> <td style="text-align:left;"> 1 Prozentpunkt erhöhte Wahrscheinlichkeit pro Lebensjahr </td> </tr> <tr> <td style="text-align:left;"> Geschlecht (m=1) </td> <td style="text-align:left;"> 0.214 </td> <td style="text-align:left;"> 21.4 Prozentpunkte erhöhte Wahrscheinlichkeit für Männer </td> </tr> <tr> <td style="text-align:left;"> Einkommen (10K €) </td> <td style="text-align:left;"> 0.058 </td> <td style="text-align:left;"> 5.8 Prozentpunkte erhöhte Wahrscheinlichkeit pro 10K € Einkommen </td> </tr> </tbody> </table> ➡️ Direkte Aussage zur Änderung der Wahrscheinlichkeit in Prozentpunkten! ] ] ??? * Warum ist das Maximum bei `\(p=0,5\)`? * Marginaler Effekt: `$$\mbox{Marginaler Effekt} = \frac{\partial p(x)}{\partial x}=\beta_1\cdot p(x)\cdot (1-p(x))$$` * Die Funktion `\(f(p)=p(1-p)\)` ist eine quadratische Funktion, die ein Maximum bei `\(p=0,5\)` hat. * Dies zeigt die Ableitung: $$\frac{d}{dp}[p(1−p)]=1−2p * Setze die Ableitung gleich 0: `\(1−2p=0⇒p=0,5\)` * Extremwert von `\(p(1−p)\)`, was wiederum den maximalen marginalen Effekt ergibt (da `\(\beta_1\)` konstant ist). * Intuition: * Bei `\(p=0.5\)` ist die Unsicherheit am größten - die Modellwahrscheinlichkeit liegt "in der Schwebe", also mittig zwischen 0 und 1. * Hier reagiert die Wahrscheinlichkeit am empfindlichsten auf Veränderungen von `\(X\)`. * Bei sehr kleinen oder großen `\(p\)` (also nahe 0 oder 1) ist das Modell "sicher", und Änderungen in `\(X\)` ändern `\(p\)` kaum noch → marginaler Effekt fast 0. --- class: inverse,center,middle # Wir brauchen eine Pause. --- background-image: url("data:image/png;base64,#http://bit.ly/cs631-donkey") background-size: 80% --- class: left ## Quellenverzeichnis .ref-slide[ <a name=bib-vonAuer_oekonometrie_2023></a>[Auer, L. von](#cite-vonAuer_oekonometrie_2023) (2023). _Ökonometrie. Eine Einführung_. Wiesbaden: SpringerGabler. ISBN: 978-3-658-42699-6. URL: [https://link.springer.com/book/10.1007/978-3-658-42700-9](https://link.springer.com/book/10.1007/978-3-658-42700-9). <a name=bib-crh_intro_2024></a>[Çetinkaya-Rundel, M. and J. Hardin](#cite-crh_intro_2024) (2024). _Introduction to Modern Statistics_. OpenIntro. ISBN: 978-1943450275. URL: [https://openintro-ims.netlify.app/](https://openintro-ims.netlify.app/). ]